// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Author: wsfuyibing <682805@qq.com>
// Date: 2024-11-19

package common

import (
	"context"
	"gitee.com/go-libs/log/base"
)

type (
	LoggingFormatter interface {
		ToByte(item Item) []byte
		ToString(item Item) string
	}

	LoggingManager interface {
		GetPlugin() (plugin LoggingPlugin)
		Log(ctx context.Context, level base.Level, message string)
		Send(items ...Item)
		SetPlugin(plugin LoggingPlugin)
		Wait()
	}

	LoggingPlugin interface {
		GetFormatter() (formatter LoggingFormatter)
		GetWriter() (formatter LoggingWriter)
		SetFormatter(formatter LoggingFormatter)
		SetWriter(writer LoggingWriter)
		Sync() bool
		Write(items []Item) (err error)
	}

	LoggingWriter interface {
		Write(formatter LoggingFormatter, items []Item) (err error)
	}
)
